3467
379
Son zamanlarda, JavaScript kodumun bir kısmını Crockford'un JSLint'i üzerinden çalıştırdım ve aşağıdaki hatayı verdi:
1. satırdaki 1. karakterdeki sorun: "Katı kullan" ifadesi eksik.
Biraz arama yaptıktan sonra, bazı insanların "katı kullan" eklediğini fark ettim; JavaScript kodlarına. İfadeyi ekledikten sonra, hata görünmeyi bıraktı. Ne yazık ki, Google bu dizgi ifadesinin arkasındaki geçmişin çoğunu açıklamadı. Kesinlikle JavaScript'in tarayıcı tarafından nasıl yorumlandığı ile bir ilgisi olmalı, ancak etkisinin ne olacağı hakkında hiçbir fikrim yok.
Öyleyse "katı kullanım" nedir; all about, bu ne anlama geliyor ve hala alakalı mı?
Mevcut tarayıcılardan herhangi biri "sıkı kullanım" kuralına yanıt veriyor mu; dize mi yoksa gelecekteki kullanım için mi? 
Javascript Strict Mode hakkındaki bu makale ilginizi çekebilir: John Resig - ECMAScript 5 Strict Mode, JSON ve Daha Fazlası
Bazı ilginç kısımlardan alıntı yapmak için:
Katı Mod, ECMAScript 5'teki yeni bir özelliktir ve bir programı veya işlevi "katı" bir çalışma bağlamına yerleştirmenize olanak tanır. Bu katı bağlam, belirli eylemlerin yapılmasını engeller ve daha fazla istisna oluşturur.
Ve:
Katı mod birkaç şekilde yardımcı olur:
İstisnalar dışında bazı yaygın kodlama hatalarını yakalar.
Nispeten "güvenli olmayan" eylemler gerçekleştirildiğinde (genel nesneye erişim sağlamak gibi) hataları önler veya atar.
Kafa karıştıran veya kötü düşünülmüş özellikleri devre dışı bırakır.
Ayrıca tüm dosyaya "katı mod" uygulayabileceğinizi unutmayın ... Veya onu yalnızca belirli bir işlev için kullanabilirsiniz (yine de John Resig'in makalesinden alıntı yaparak):
// Katı olmayan kod ...
(işlev () {
"sıkı kullanın";
// Kitaplığınızı kesinlikle tanımlayın ...
}) ();
// Katı olmayan kod ...
Eski ve yeni kodu karıştırmanız gerekirse bu yararlı olabilir ;-)
Bu yüzden, Perl'de kullanabileceğiniz "sıkı kullanım" a biraz benzediğini düşünüyorum (dolayısıyla adı?): Kırılmalara neden olabilecek daha fazla şeyi tespit ederek daha az hata yapmanıza yardımcı olur.
Katı mod artık tüm büyük tarayıcılar tarafından desteklenmektedir.
Yerel ECMAScript modülleri (içe ve dışa aktarma ifadeleriyle) ve ES6 sınıflarında, katı mod her zaman etkindir ve devre dışı bırakılamaz.
|
ECMAScript 5'in yeni bir özelliği. John Resig bunun güzel bir özetini yazdı.
Bu, JavaScript dosyalarınıza (dosyanızın en üstüne veya bir işlevin içine) koyduğunuz bir dizedir ve şuna benzer:
"sıkı kullanın";
Kodunuza şimdi koymak, sadece bir dizge olduğu için mevcut tarayıcılarda herhangi bir soruna neden olmamalıdır. Kodunuz pragmayı ihlal ederse, gelecekte kodunuzda sorunlara neden olabilir. Örneğin, önce foo'yu tanımlamadan şu anda foo = "bar" varsa, kodunuz başarısız olmaya başlayacaktır ... bu bence iyi bir şey.
|
"Sıkı kullan" ifadesi; tarayıcıya, JavaScript'in azaltılmış ve daha güvenli bir özellik kümesi olan Katı modu kullanma talimatı verir.
Özelliklerin listesi (kapsamlı olmayan)
Global değişkenlere izin vermez. (Değişken adlarındaki eksik değişken bildirimlerini ve yazım hatalarını yakalar)
Sessiz başarısız atamalar katı modda hata verir (NaN = 5; atama)
Silinemeyen özellikleri silme girişimleri (Object.prototype silin)
Bir nesne değişmezindeki tüm özellik adlarının benzersiz olmasını gerektirir (var x = {x1: "1", x1: "2"})
İşlev parametresi adları benzersiz olmalıdır (işlev toplamı (x, x) {...})
Sekizlik sözdizimini yasaklar (var x = 023; bazı geliştiriciler yanlış bir şekilde önceki sıfırın sayıyı değiştirmek için hiçbir şey yapmadığını varsayar.)
With anahtar kelimesini yasaklar
katı modda eval yeni değişkenler getirmez
Düz adların silinmesini yasaklar (x'i silin)
Herhangi bir biçimde değerlendirilen isimlerin ve argümanların bağlanmasını veya atanmasını yasaklar
Katı mod, arguments nesnesinin özelliklerini biçimsel parametrelerle değiştirmez. (yani fonksiyon toplamında (a, b) {dönüş argümanları [0] + b;} Bu işe yarar çünkü argümanlar [0] a'ya bağlıdır vb.)
arguments.callee desteklenmez
[Ref: Katı mod, Mozilla Geliştirici Ağı]
|
İnsanlar sıkı kullanım konusunda endişeliyse, bu makaleye göz atmaya değer olabilir:
Tarayıcılarda ECMAScript 5 'Katı mod' desteği. Bu ne anlama geliyor? NovoGeek.com - Krishna'nın web günlüğü
Tarayıcı desteğinden bahsediyor, ancak daha da önemlisi, bununla nasıl güvenle başa çıkılacağı:
function isStrictMode () {
geri! bu;
}
/ *
false döndürür, çünkü 'bu' genel nesneyi ifade eder ve
'! bu' yanlış olur
* /
function isStrictMode () {
"sıkı kullanın";
geri! bu;
}
/ *
doğru döndürür, çünkü katı modda 'this' anahtar kelimesi
geleneksel JS'den farklı olarak global nesneye gönderme yapmaz.
Yani burada, "bu" "tanımsız" ve "bu" gerçek oluyor.
* /
|
Dikkatli olun, tüm zorlu programcılar: mevcut koda "sıkı kullanım" uygulamak tehlikeli olabilir! Bu şey, kodu 'daha iyi' hale getirmek için koda yapıştırabileceğiniz iyi hissettiren, mutlu yüzlü bir etiket değil. "Sıkı kullan" pragması ile, tarayıcı aniden daha önce hiç atmadığı rastgele yerlere istisnaları ATACAK çünkü o noktada JavaScript'in mutlu bir şekilde izin verdiği, ancak kesinlikle JavaScript'i aşağılayan bir şey yapıyorsunuz! Kodunuzda nadiren kullanılan çağrılarda gizlenen ve yalnızca sonunda çalıştırıldıklarında bir istisna yaratan, örneğin ödeme yapan müşterilerinizin kullandığı üretim ortamında katılık ihlalleri yaşayabilirsiniz!
Eğer dalmaya gidecekseniz, kapsamlı birim testlerinin ve modülünüzün havaya uçacak karanlık bir köşesi olmadığına dair size biraz güven verecek sıkı bir şekilde yapılandırılmış JSHint oluşturma görevinin yanı sıra "katı kullanın" iyi bir fikirdir. korkunç bir şekilde, Katı Modu açtığınız için. Veya, hey, işte başka bir seçenek: eski kodlarınızın hiçbirine "katı kullan" eklemeyin, muhtemelen bu şekilde daha güvenlidir, dürüst olmak gerekirse. KESİNLİKLE sahip olmadığınız modüller veyabakım, üçüncü taraf modülleri gibi.
Bence ölümcül kafesli bir hayvan olsa da, "katı kullanmak" iyi bir şey olabilir, ancak bunu doğru yapmalısınız. Sıkıya gitmenin en iyi zamanı, projenizin sıfırdan başlamanızdır. JSHint / JSLint'i tüm uyarıları ve seçenekleri ekibinizin sindirebileceği kadar sıkı olacak şekilde yapılandırın, Grunt + Karma + Chai gibi donanıma sahip iyi bir derleme / test / iddia sistemi elde edin ve sadece SONRA tüm yeni modüllerinizi " sıkı kullanın ". Pek çok çirkin hatayı ve uyarıyı gidermeye hazır olun. JSHint / JSLint herhangi bir ihlal oluşturursa, derlemeyi BAŞARISIZ olarak yapılandırarak herkesin yer çekimini anladığından emin olun.
"Sıkı kullan" ı benimsediğimde projem sıfırdan bir proje değildi. Sonuç olarak, IDE'm kırmızı işaretlerle dolu çünkü modüllerimin yarısında "katı kullanmıyorum" ve JSHint bundan şikayet ediyor. Bu bana gelecekte ne yapmam gerektiğini hatırlatıyor. Amacım, eksik olan "sıkı kullanım" ifadelerimin tümü nedeniyle kırmızı lekesiz olmaktır, ancak bu artık yıllar sonra.
|
'Sıkı kullan' kullanmak; aniden kodunuzu daha iyi hale getirmez.
JavaScript katı modu, ECMAScript 5'te bir özelliktir. Katı modu, bunu komut dosyanızın / işlevinizin en üstünde bildirerek etkinleştirebilirsiniz.
'sıkı kullanın';
Bir JavaScript motoru bu yönergeyi gördüğünde, kodu özel bir modda yorumlamaya başlayacaktır. Bu modda, potansiyel hatalar olarak sonuçlanabilecek belirli kodlama uygulamaları tespit edildiğinde (katı modun arkasındaki mantık budur) hatalar ortaya çıkar.
Şu örneği düşünün:
var a = 365;
var b = 030;
Sayısal değişmezleri sıraya koyma takıntısında, geliştirici yanlışlıkla b değişkenini sekizlik bir değişmez değerle başlattı. Katı olmayan mod, bunu 24 değerine (10 tabanında) sahip sayısal bir hazır bilgi olarak yorumlar. Ancak katı mod bir hata verecektir.
Katı moddaki uzmanlıkların kapsamlı olmayan bir listesi için bu yanıta bakın.
'Sıkı kullan'ı nerede kullanmalıyım?
Yeni JavaScript uygulamamda: Kesinlikle! Katı mod, kodunuzla aptalca bir şey yaptığınızda ihbar olarak kullanılabilir.
Mevcut JavaScript kodumda: Muhtemelen hayır! Mevcut JavaScript kodunuz katı modda yasaklanmış ifadelere sahipse, uygulama basitçe bozulur. Katı mod istiyorsanız, mevcut kodunuzda hata ayıklamaya ve düzeltmeye hazırlıklı olmalısınız. Bu nedenle 'katı kullanın'; aniden kodunuzu daha iyi hale getirmez.
Katı modu nasıl kullanırım?
Bir 'katı kullanım' ekleyin; senaryonuzun üstünde ifade:
// Dosya: myscript.js
'sıkı kullanın';
var a = 2;
....
Myscript.js dosyasındaki her şeyin katı modda yorumlanacağını unutmayın.
Veya bir 'katı kullanım' ekleyin; işlev bedeninizin üstünde ifade:
function doSomething () {
'sıkı kullanın';
...
}
DoSomething işlevinin sözcüksel kapsamındaki her şey katı modda yorumlanacaktır. Sözcük kapsamı kelimesi burada önemlidir. Örneğin, katı kodunuz katı olmayan bir kitaplık işlevini çağırırsa, yalnızca kodunuz katı modda çalıştırılır, çağrılan işlev çalıştırılmaz. Daha iyi bir açıklama için bu yanıta bakın.
Katı modda yasak olan şeyler nelerdir?
Katı modda yasak olan birkaç şeyi açıklayan güzel bir makale buldum (bunun özel bir liste olmadığını unutmayın):
Dürbün
Geçmişte JavaScript, işlevlerin nasıl çalıştığı konusunda
kapsamlı. Bazen statik olarak kapsamlı görünürler, ancak bazıları
özellikler, dinamik olarak kapsama alınmış gibi davranmalarını sağlar. Bu
kafa karıştırıcı, programları okumayı ve anlamayı zorlaştırıyor.
Yanlış anlaşılma hatalara neden olur. Aynı zamanda performans açısından da bir sorundur.
Statik kapsam belirleme, derleme sırasında değişken bağlamanın gerçekleşmesine izin verir
zaman, ancak dinamik kapsam gereksinimi, bağlamanın
önemli bir performansla birlikte gelen çalışma süresine ertelendi
ceza.
Katı mod, tüm değişken bağlamanın statik olarak yapılmasını gerektirir.
Bu, önceden dinamik bağlama gerektiren özelliklerin
ortadan kaldırılmalı veya değiştirilmelidir. Özellikle, with ifadesi
elimine edildi ve eval işlevinin
arayanın ortamı ciddi şekilde kısıtlanmıştır.
Katı kodun avantajlarından biri, YUI Compressor gibi araçların
işlerken daha iyi bir iş çıkarabilir.
İma Edilen Global Değişkenler
JavaScript, global değişkenleri ima etti. Eğer
bir değişkeni açıkça tanımlamazsanız, global bir değişken
sizin için dolaylı olarak beyan edilmiştir. Bu, programlamayı kolaylaştırır
yeni başlayanlar, çünkü temel temizlik hizmetlerinin bir kısmını ihmal edebilirler
ev işleri. Ancak daha büyük programların yönetimini çok daha fazla yapar
zordur ve güvenilirliği önemli ölçüde azaltır. Yani kesinlikle
mod, ima edilen global değişkenler artık oluşturulmamaktadır. Malısın
tüm değişkenlerinizi açıkça beyan edin.
Küresel Kaçak
Buna neden olabilecek birkaç durum var
global nesneye bağlı olmak. Örneğin, unutursanız
bir kurucu çağırırken yeni öneki sağlayınişlev,
yapıcının bu, beklenmedik bir şekilde genel nesneye bağlanacaktır, bu nedenle
yeni bir nesneyi başlatmak yerine sessizce
genel değişkenlerle oynama. Bu durumlarda katı mod,
bunun yerine bunu undefined'a bağlayın, bu da yapıcının
bunun yerine bir istisna atarak hatanın çok fazla tespit edilmesini sağlar
Er.
Gürültülü Arıza
JavaScript her zaman salt okunur özelliklere sahipti, ancak siz
ES5'in Object.createProperty'sine kadar bunları kendiniz oluşturamazsınız
işlev bu yeteneği açığa çıkardı. Bir değer atamayı denediyseniz
salt okunur bir özelliğe dönüştürülürse, sessizce başarısız olur. Görev
mülkün değerini değiştirmez, ancak programınız şu şekilde devam eder:
olmasına rağmen. Bu, programların
tutarsız bir duruma girmek. Katı modda, bir
salt okunur özelliği bir istisna atar.
Sekizli
Sayıların sekizlik (veya 8 tabanında) gösterimi son derece
kelimesi olan makinelerde makine düzeyinde programlama yaparken kullanışlıdır.
boyutları 3'ün katı idi. CDC ile çalışırken sekizlik tabana ihtiyaç duyuyordunuz
60 bitlik bir kelime boyutuna sahip 6600 ana bilgisayar. Eğer okuyabilseydin
sekizlik, bir kelimeye 20 basamaklı olarak bakabilirsiniz. Temsil edilen iki rakam
işlem kodu ve bir basamak 8 kayıttan birini tanımladı. Sırasında
makine kodlarından yüksek seviyeli dillere yavaş geçiş,
programlama dillerinde sekizli formlar sağlamanın yararlı olduğu düşünülmektedir.
C'de, sekizlikliğin son derece talihsiz bir temsili
seçili: Baştaki sıfır. Yani C'de 0100, 64 anlamına gelir, 100 değil ve 08,
hata, 8 değil. Daha da önemlisi, bu anakronizm
JavaScript dahil neredeyse tüm modern dillere kopyalandı, burada
yalnızca hata oluşturmak için kullanılır. Başka bir amacı yoktur. Yani içinde
katı mod, sekizlik formlara artık izin verilmiyor.
Ve benzeri
Argümanlar sözde dizisi biraz daha fazla olur
ES5'teki dizi benzeri. Katı modda, arayan ucunu ve arayan ucunu kaybeder
özellikleri. Bu, argümanlarınızı güvenilmeyenlere iletmenizi mümkün kılar
çok fazla gizli bağlamdan vazgeçmeden kod. Ayrıca
fonksiyonların arguments özelliği ortadan kaldırılır.
Katı modda, bir işlev değişmezindeki yinelenen anahtarlar bir
sözdizimi hatası. Bir işlevin aynı ada sahip iki parametresi olamaz.
Bir işlev, işlevlerinden biri ile aynı ada sahip bir değişkene sahip olamaz
parametreleri. Bir işlev kendi değişkenlerini silemez. Bir girişimde bulunmak
yapılandırılamayan bir özelliği silmek artık bir istisna atıyor. İlkel
değerler örtük olarak sarmalanmaz.
Gelecekteki JavaScript sürümleri için ayrılmış kelimeler
ECMAScript 5, ayrılmış kelimelerin bir listesini ekler. Bunları değişkenler veya bağımsız değişkenler olarak kullanırsanız, katı mod bir hata verir. Ayrılmış kelimeler şunlardır:
uygular, arabirim, izin, paket, özel, korumalı, genel, statik ve verim
Daha fazla okuma
Katı Mod - JavaScript | MDN
Katı mod için tarayıcı desteği
Katı moda geçiş
|
Her geliştiricinin şimdi katı modu kullanmaya başlamasını şiddetle tavsiye ediyorum. Sıkı modun, kodunuzda olduğunu bile bilmediğimiz hatalardan bizi kurtarmaya yasal olarak yardımcı olacağını destekleyen yeterince tarayıcı var.
Görünüşe göre, ilk aşamada daha önce hiç karşılaşmadığımız hatalar olacak. Tam avantaj elde etmek için, her şeyi yakaladığımızdan emin olmak için katı moda geçtikten sonra uygun testler yapmamız gerekir. Kesinlikle, kodumuza yalnızca katı kullanımı koymuyoruz ve hata olmadığını varsaymıyoruz. Dolayısıyla, daha iyi kod yazmak için bu inanılmaz derecede kullanışlı dil özelliğini kullanmaya başlama zamanı geldi.
Örneğin,
var kişi = {
isim: 'xyz',
pozisyon: 'abc',
fullname: function () {"katı kullan"; this.name döndür; }
};
JSLint, Douglas Crockford tarafından yazılmış bir hata ayıklayıcıdır. Komut dosyanızı yapıştırmanız yeterlidir; kodunuzdaki fark edilebilir sorunları ve hataları hızlı bir şekilde tarayacaktır.
|
Diğer cevapları tamamlayan biraz daha temel bir cevap sunmak istiyorum. En popüler yanıtı düzenlemeyi umuyordum, ancak başarısız oldum. Elimden geldiğince kapsamlı ve eksiksiz hale getirmeye çalıştım.
Daha fazla bilgi için MDN belgelerine başvurabilirsiniz.
ECMAScript 5'te tanıtılan bir yönerge "sıkı kullanın".
Yönergeler ifadelere benzer, ancak farklıdır.
use katı anahtar sözcükler içermez: Yönerge, özel bir dize (tek veya çift tırnak içinde) içeren basit bir ifade ifadesidir. ECMAScript 5'i uygulamayan JavaScript motorları yalnızca yan etkileri olmayan bir ifade ifadesi görür. ECMAScript standartlarının gelecekteki sürümlerinin gerçek bir anahtar kelime olarak kullanımı tanıtması beklenmektedir; alıntılar böylelikle geçerliliğini yitirecektir.
use tight yalnızca bir komut dosyasının veya işlevin başlangıcında kullanılabilir, yani her diğer (gerçek) ifadeden önce gelmelidir. Bir fonksiyon komut dizisindeki ilk talimat olmak zorunda değildir: dizge değişmezlerinden (ve JavaScriptuygulamalar bunları uygulamaya özel direktifler olarak ele alabilir). İlk gerçek ifadeyi (bir kod veya işlevde) izleyen dize değişmez ifadeleri, basit ifade ifadeleridir. Tercümanlar bunları direktif olarak yorumlamamalıdır ve hiçbir etkisi yoktur.
Kullanım katı yönergesi, aşağıdaki kodun (bir komut dosyasında veya bir işlevde) katı kod olduğunu belirtir.
Bir komut dosyasının en üst düzeyindeki kod (bir işlevde olmayan kod), komut dosyası bir kullanım katı yönergesi içerdiğinde katı kod olarak kabul edilir.
Bir işlevin içeriği katı bir kodda tanımlandığında veya işlev bir kullanım katı yönergesi içerdiğinde katı kod olarak kabul edilir.
Eval () yöntemine iletilen kod, eval () katı bir koddan çağrıldığında veya sıkı kullanım yönergesinin kendisini içerdiğinde katı kod olarak kabul edilir.
ECMAScript 5'in katı modu, dilin ilgili açıklarını ortadan kaldıran ve daha sıkı hata denetimi ve daha yüksek güvenlik sağlayan, JavaScript dilinin kısıtlanmış bir alt kümesidir. Aşağıda, katı mod ile normal mod arasındaki farklar listelenmektedir (bunlardan ilk üçü özellikle önemlidir):
With ifadesini katı modda kullanamazsınız.
Katı modda tüm değişkenlerin bildirilmesi gerekir: değişken, işlev, işlev parametresi, catch-clause parametresi veya global Object özelliği olarak bildirilmemiş bir tanımlayıcıya bir değer atarsanız, bir ReferenceError alırsınız. Normal modda, tanımlayıcı örtük olarak bir global değişken olarak bildirilir (global Object'in bir özelliği olarak)
Katı modda bu anahtar sözcük, işlevler olarak çağrılan işlevlerde tanımsız değere sahiptir (yöntem olarak değil). (Normal modda bu her zaman genel Nesneye işaret eder). Bu fark, bir uygulamanın katı modu destekleyip desteklemediğini test etmek için kullanılabilir:
var hasStrictMode = (function () {"katı kullan"; bunu döndür === tanımsız} ());
Ayrıca call () ile bir işlev çağrıldığında veya katı modda uygulandığında, bu tam olarak call () veya apply () çağrısının ilk argümanının değeridir. (Normal modda null ve undefined, global Object ile değiştirilir ve nesne olmayan değerler nesnelere dönüştürülür.)
Katı modda, salt okunur özelliklere atamaya veya genişletilemeyen bir nesne için yeni özellikler tanımlamaya çalıştığınızda bir TypeError alacaksınız. (Normal modda her ikisi de hata mesajı olmadan başarısız olur.)
Katı modda, eval () öğesine kod iletirken, çağıranın kapsamındaki değişkenleri veya işlevleri açıklayamaz veya tanımlayamazsınız (normal modda yapabileceğiniz gibi). Bunun yerine, eval () için yeni bir kapsam oluşturulur ve değişkenler ve işlevler bu kapsamdadır. Eval () yürütmeyi bitirdikten sonra bu kapsam yok edilir.
Katı modda, bir işlevin arguments nesnesi, bu işleve iletilen değerlerin statik bir kopyasını içerir. Normal modda arguments nesnesi biraz "sihirli" bir davranışa sahiptir: Dizinin öğeleri ve adlandırılmış işlev parametreleri aynı değere başvurur.
Katı modda, silme işlecinin ardından nitelikli olmayan bir tanımlayıcı (bir değişken, işlev veya işlev parametresi) geldiğinde bir SyntaxError hatası alırsınız. Normal modda silme ifadesi hiçbir şey yapmaz ve yanlış olarak değerlendirilir.
Katı modda, yapılandırılamayan bir özelliği silmeye çalıştığınızda bir TypeError alırsınız. (Normal modda deneme başarısız olur ve silme ifadesi yanlış olarak değerlendirilir).
Katı modda, bir nesne değişmezi için aynı ada sahip birkaç özellik tanımlamaya çalıştığınızda, sözdizimsel bir hata olarak kabul edilir. (Normal modda hata yoktur.)
Katı modda, bir işlev bildiriminin aynı ada sahip birden çok parametresi olduğunda, sözdizimsel bir hata olarak kabul edilir. (Normal modda hata yoktur.)
Katı modda sekizlik değişmez değerlere izin verilmez (bunlar 0x ile başlayan değişmez değerlerdir. (Normal modda bazı uygulamalar sekizlik değişmez değerlere izin verir.)
Katı modda, tanımlayıcılar değerlendirilir ve bağımsız değişkenler anahtar kelimeler gibi ele alınır. Değerlerini değiştiremezsiniz, onlara bir değer atayamazsınız ve bunları değişkenler, işlevler, işlev parametreleri veya bir catch bloğunun tanımlayıcıları için ad olarak kullanamazsınız.
Katı modda, çağrı yığınını inceleme olasılıkları üzerinde daha fazla kısıtlama vardır. arguments.caller ve arguments.callee katı moddaki bir işlevde bir TypeError hatasına neden olur. Ayrıca, katı moddaki bazı çağıran ve argüman özellikleri, onları okumaya çalıştığınızda bir TypeError'a neden olur.
|
Benim görüşüm:
Katı modun hedeflerinden biri, sorunların daha hızlı hata ayıklanmasına izin vermektir. Geliştiricilere, web sayfanızın sessiz ve tuhaf davranışlarına neden olabilecek bazı yanlış şeyler olduğunda istisna atarak yardımcı olur. Katı kullandığımız an, kod hataları atacak ve bu da geliştiricinin önceden düzeltmesine yardımcı olacaktır.
Sıkı kullandıktan sonra öğrendiğim birkaç önemli şey:
Global Değişken Beyanını Önler:
var tree1Data= {isim: 'Muz Ağacı', yaş: 100, leafCount: 100000};
function Ağacı (typeOfTree) {
yaş var;
var leafCount;
age = typeOfTree.age;
leafCount = typeOfTree.leafCount;
nameoftree = typeOfTree.name;
};
var tree1 = new Tree (tree1Data);
console.log (pencere);
Şimdi bu kod, window.nameoftree kullanılarak erişilebilen global kapsamda nameoftree oluşturur. Sıkı kullanımı uyguladığımızda, kod hata verecektir.
Yakalanmamış ReferenceError: nameoftree tanımlı değil
Örneklem
İfade ile ortadan kaldırır:
ile ifadeler, uglify-js gibi araçlar kullanılarak küçültülemez. Ayrıca kullanımdan kaldırıldılar ve gelecekteki JavaScript sürümlerinden kaldırıldılar.
Örneklem
Yinelemeleri Önler:
Yinelenen mülke sahip olduğumuzda, bir istisna atar
Yakalanmamış SyntaxError: Nesne değişmezinde yinelenen veri özelliği değil
katı modda izin verilir
"sıkı kullanın";
var tree1Data = {
adı: 'Muz Ağacı',
yaş: 100,
leafCount: 100000,
isim: 'Muz Ağacı'
};
Birkaç tane daha var ama bu konuda daha fazla bilgiye ihtiyacım var.
|
Geçen yıl ya da daha önce piyasaya sürülen bir tarayıcı kullanıyorsanız, büyük olasılıkla JavaScript Katı modu desteklemektedir. Sadece ECMAScript 5 mevcut standart haline gelmeden önceki eski tarayıcılar bunu desteklemiyor.
Komutun etrafındaki alıntılar, kodun eski tarayıcılarda da çalışacağından emin olur (katı modda bir sözdizimi hatası oluşturan şeyler genellikle yalnızca bu eski tarayıcılarda algılanması zor bir şekilde betiğin arızalanmasına neden olur).
|
"Katı kullan"; eklenirken, aşağıdaki durumlar komut dosyası yürütülmeden önce bir SyntaxError hatası atar:
Yeni ayrılmış anahtar sözcüklerden birini kullanarak (ECMAScript 6 için öngörülen) gelecekteki ECMAScript sürümlerinin önünü açma: uygular, arabirim, izin, paket, özel, korumalı, genel, statik ve verim.
Bloklar halinde fonksiyon bildirme
eğer (a : 3: 15)
: 6: 5
Burada derleyici referans hatasını atar. Katı modda, derleyici değişkeni bildirmeden kullanmamıza izin vermez. Böylece bellek sızıntıları önlenebilir. Ek olarak, daha optimize edilmiş kod yazabiliriz.
|
Katı mod, katı olmayan modda göz ardı edilebilecek hataları ortadan kaldırarak javascript'i "daha güvenli" hale getirir.
En iyi uygulamalar arasında kabul ediliyor mu?
Evet, Sıkı modu dahil etmek için javascript ile çalışırken en iyi uygulamaların bir parçası olarak kabul edilir. Bu, JS dosyanıza aşağıdaki kod satırını ekleyerek yapılır.
'sıkı kullanın';
kodunuzda.
Kullanıcı aracıları için ne anlama geliyor?
Kodun katı modda yorumlanması gerektiğini belirtmek, tarayıcılar gibi kullanıcı aracılarına kodu tam anlamıyla yazıldığı gibi ele almaları ve kod anlamsızsa bir hata atmaları gerektiğini belirtir.
Örneğin: .js dosyanızda aşağıdaki koda sahip olduğunuzu düşünün:
1. Senaryo: [KESİNLİK MODU YOK]
var city = "Chicago"
console.log (şehir) // Şehir adını yazdırır, yani Chicago
Senaryo 2: [KESİNLİK MODU YOK]
city ​​= "Chicago"
console.log (şehir) // Şehir adını yazdırır, yani Chicago
Öyleyse neden her iki durumda da değişken adı yazdırılıyor?
Katı mod etkinleştirilmeden, kullanıcı aracıları genellikle bir anlam ifade etme çabasıyla sorunlu kodda bir dizi değişiklik yapar. Yüzeyde, bu iyi bir şey gibi görünebilir ve gerçekten de, katı modun dışında çalışmak, insanların tüm ayrıntılar tam olarak çivilenmeden JavaScript kodu ile ıslanmasını mümkün kılar. Ancak, bir geliştirici olarak kodumda bir hata bırakmak istemiyorum çünkü daha sonra geri gelip beni ısırabileceğini biliyorum ve ayrıca sadece iyi kod yazmak istiyorum. İşte katı modun yardımcı olduğu yer burasıdır.
Senaryo 3: [KESİNLİ MOD]
'sıkı kullanın';
city ​​= "Chicago"
console.log (şehir) // Referans Hatası: atama, bildirilmemiş değişken şehir.
Ek ipucu: Katı modu kullanarak kod kalitesini korumak için, özellikle birden fazla .js dosyanız varsa bunu tekrar tekrar yazmanıza gerek yoktur. Bu kuralı aşağıdaki gibi eslint kurallarında global olarak uygulayabilirsiniz:
Dosya adı: .eslintrc.js
module.exports = {
env: {
es6: doğru
},
kurallar: {
katı: ['hata', 'genel'],
},
};
Tamam, o halde katı modda ne engellenir?
Bir değişkeni bildirmeden kullanmak, katı modda bir hata oluşturacaktır. Bu, uygulamanız boyunca istemeden genel değişkenler oluşturmayı önlemek içindir. Chicago basımıyla ilgili örnek bunu özellikle kapsar.
Bir değişkeni veya işlevi veya bağımsız değişkeni silmek, katı modda hayır-hayırdır.
"sıkı kullanın";
fonksiyon x (p1, p2) {};
x'i sil; // Bu bir hataya neden olur
Katı kurallı modda bir parametre adının çoğaltılmasına izin verilmez.
"sıkı kullanın";
fonksiyon x (p1, p1) {}; // Bu bir hataya neden olur
Javascript dilinde ayrılmış kelimelere katı modda izin verilmez. Sözler arabirim, izin, paketler, özel, korumalı, geneldir. statik ve verim
Daha kapsamlı bir liste için MDN belgelerine bakın: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
Oldukça aktif soru. Bu soruyu cevaplamak için 10 itibar kazanın. İtibar koşulu, bu sorunun istenmeyen postalardan ve yanıtlanmayan etkinliklerden korunmasına yardımcı olur.
Aradığın cevap değil mi? Javascript sözdizimi jslint use-tight etiketli diğer sorulara göz atın veya kendi sorunuzu sorun.